#include<unordered_map>
using namespace std;
class Solution {
public:
    int findMaxLength(vector<int>& nums) {
        unordered_map<int,int> hash;  //第一个int存sum ，第二个int存位置
        int n = nums.size(), sum = 0 ,ret = 0;
        hash[0]= -1;   //如果整个数组为0（k）的情况
        for(int i = 0; i < n ; i++){
            sum += nums[i] == 0? -1 : 1;   //转换为和为k的子数组

            if(hash.count(sum)) ret = max(ret, i-hash[sum]);  
            else hash[sum] = i;  //sum相同的情况下int只存左边那个。
           
        }
        return ret;
    }
};